package com.hsjk.szwj.module.train.service;

import com.hsjk.szwj.framework.common.pojo.PageResult;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminOrderPageReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminOrderPageRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.order.OrderBasicInfoRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.order.OrderCreateReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.order.OrderInfoRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.order.OrderListRespVO;
import com.hsjk.szwj.module.train.dal.dataobject.order.OrderDO;

import java.util.List;

/**
 * @author chenjiawei
 * @desc
 * @Date 2023/08/28 10:42
 **/
public interface IOrderService {
    /**
     * 创建订单
     *
     * @param reqVO
     * @return java.lang.Long
     * @author chenjiawei
     * @date 2023/8/28 11:21 上午
     **/
    Long createOrder(OrderCreateReqVO reqVO);

    /**
     * 根据订单id查询订单信息
     *
     * @param id
     * @return com.hsjk.szwj.module.train.controller.app.vo.order.OrderInfoRespVO
     * @author chenjiawei
     * @date 2023/8/28 1:43 下午
     **/
    OrderInfoRespVO getOrderInfoById(Long id);

    /**
     * 根据订单id查询订单信息
     *
     * @param id
     * @return com.hsjk.szwj.module.train.controller.app.vo.order.OrderInfoRespVO
     * @author chenjiawei
     * @date 2023/11/22 11:25 PM
     **/
    OrderDO getOrderInfoByIdIgnoreTenant(Long id);

    /**
     * 取消订单
     *
     * @param id
     * @return boolean
     * @author chenjiawei
     * @date 2023/9/2 2:53 下午
     **/
    boolean cancelOrder(Long id);

    /**
     * 根据当前登录用户获取订单列表
     *
     * @return java.util.List<com.hsjk.szwj.module.train.controller.app.vo.order.OrderInfoRespVO>
     * @author chenjiawei
     * @date 2023/9/2 3:06 下午
     **/
    List<OrderListRespVO> getOrderListByMemberId();

    OrderInfoRespVO getOrderInfoByOrderNo(String orderNo);

    OrderBasicInfoRespVO getOrderBasicInfoByPayOrderId(String payOrderId);

    /**
     * 分页获取订单数据
     *
     * @param reqVO
     * @return com.hsjk.szwj.framework.common.pojo.PageResult<com.hsjk.szwj.module.train.controller.admin.vo.AdminOrderPageRespVO>
     * @author chenjiawei
     * @date 2023/10/12 12:45 AM
     **/
    PageResult<AdminOrderPageRespVO> getAdminOrderPage(AdminOrderPageReqVO reqVO);

    /**
     * 超时取消订单
     *
     * @param id
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/11/22 11:33 PM
     **/
    Boolean failureTimeCancelOrder(Long id);

    /**
     * 删除订单
     *
     * @param id
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/11/22 11:38 PM
     **/
    void deleteOrder(Long id);

}
